{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Griffin-Lim algorithm comparison between LibROSA and TF"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "import glob\n",
    "import tempfile\n",
    "import time\n",
    "\n",
    "import librosa.display\n",
    "import yaml\n",
    "\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from ipywidgets import GridBox, Label, Layout, Audio\n",
    "from tensorflow_tts.utils import TFGriffinLim, griffin_lim_lb\n",
    "\n",
    "# %config InlineBackend.figure_format = 'svg'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get mel spectrogram example and corresponding ground truth audio."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "mel_spec = np.load(\"../dump/train/norm-feats/LJ001-0007-norm-feats.npy\")\n",
    "gt_wav = np.load(\"../dump/train/wavs/LJ001-0007-wave.npy\")\n",
    "\n",
    "stats_path = \"../dump/stats.npy\"\n",
    "dataset_config_path = \"../preprocess/ljspeech_preprocess.yaml\"\n",
    "config = yaml.load(open(dataset_config_path), Loader=yaml.Loader)\n",
    "\n",
    "griffin_lim_tf = TFGriffinLim(stats_path, config)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "TF version has GPU compatibility and supports batch dimension."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "inv_wav_tf = griffin_lim_tf(mel_spec[tf.newaxis, :], n_iter=32)  # [1, mel_len] -> [1, audio_len]\n",
    "inv_wav_lb = griffin_lim_lb(mel_spec, stats_path, config)  # [mel_len] -> [audio_len]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Time comparison between both implementations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.29 s ± 219 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
     ]
    }
   ],
   "source": [
    "%timeit griffin_lim_tf(mel_spec[tf.newaxis, :])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "717 ms ± 8.95 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
     ]
    }
   ],
   "source": [
    "%timeit griffin_lim_lb(mel_spec, stats_path, config)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf_wav = tf.audio.encode_wav(inv_wav_tf[0, :, tf.newaxis], config[\"sampling_rate\"])\n",
    "lb_wav = tf.audio.encode_wav(inv_wav_lb[:, tf.newaxis], config[\"sampling_rate\"])\n",
    "gt_wav_ = tf.audio.encode_wav(gt_wav[:, tf.newaxis], config[\"sampling_rate\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "090262d2d93e4c87abb9038087d0b99c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "GridBox(children=(Label(value='Ground Truth'), Label(value='Librosa'), Label(value='TensorFlow'), Audio(value=…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "items = [\n",
    "    Audio(value=x.numpy(), autoplay=False, loop=False)\n",
    "    for x in [gt_wav_, lb_wav, tf_wav]\n",
    "]\n",
    "labels = [Label(\"Ground Truth\"), Label(\"Librosa\"), Label(\"TensorFlow\")]\n",
    "GridBox(\n",
    "    children=[*labels, *items],\n",
    "    layout=Layout(grid_template_columns=\"25% 25% 25%\", grid_template_rows=\"30px 30px\"),\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "_, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(10, 8), sharey=True, sharex=True)\n",
    "librosa.display.waveplot(gt_wav, sr=config[\"sampling_rate\"], color=\"b\", ax=ax1)\n",
    "ax1.set_title(\"Ground truth\")\n",
    "ax1.set_xlabel(\"\")\n",
    "librosa.display.waveplot(inv_wav_lb, sr=config[\"sampling_rate\"], color=\"g\", ax=ax2)\n",
    "ax2.set_title(\"Griffin-Lim reconstruction (librosa)\")\n",
    "ax2.set_xlabel(\"\")\n",
    "librosa.display.waveplot(\n",
    "    inv_wav_tf[0].numpy(), sr=config[\"sampling_rate\"], color=\"r\", ax=ax3\n",
    ")\n",
    "ax3.set_title(\"Griffin-Lim reconstruction (TF)\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration time: 46.1579s, output shape: (10, 206336)\n",
      "Iteration time: 49.9080s, output shape: (10, 218624)\n",
      "Iteration time: 49.4804s, output shape: (10, 219648)\n",
      "Iteration time: 51.8307s, output shape: (10, 221952)\n",
      "Iteration time: 48.4572s, output shape: (10, 210944)\n"
     ]
    }
   ],
   "source": [
    "def gen():\n",
    "    file_list = glob.glob(\"../dump/train/norm-feats/*-norm-feats.npy\")\n",
    "    for file in file_list:\n",
    "        yield np.load(file)\n",
    "\n",
    "\n",
    "mel_ds = tf.data.Dataset.from_generator(\n",
    "    gen, (tf.float32), tf.TensorShape([None, config[\"num_mels\"]])\n",
    ").padded_batch(10)\n",
    "\n",
    "for mel_batch in mel_ds.take(5):\n",
    "    start_batch = time.perf_counter()\n",
    "    inv_wav_tf_batch = griffin_lim_tf(mel_batch)\n",
    "    print(\n",
    "        f\"Iteration time: {time.perf_counter() - start_batch:.4f}s, output shape: {inv_wav_tf_batch.shape}\"\n",
    "    )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Saving outputs with both implementations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[0m\u001b[00;36m0.wav\u001b[0m\r\n",
      "\u001b[00;36m1.wav\u001b[0m\r\n",
      "\u001b[00;36m2.wav\u001b[0m\r\n",
      "\u001b[00;36m3.wav\u001b[0m\r\n",
      "\u001b[00;36m4.wav\u001b[0m\r\n",
      "\u001b[00;36m5.wav\u001b[0m\r\n",
      "\u001b[00;36m6.wav\u001b[0m\r\n",
      "\u001b[00;36m7.wav\u001b[0m\r\n",
      "\u001b[00;36m8.wav\u001b[0m\r\n",
      "\u001b[00;36m9.wav\u001b[0m\r\n",
      "\u001b[00;36mlb.wav\u001b[0m\r\n",
      "\u001b[00;36mtf.wav\u001b[0m\r\n"
     ]
    }
   ],
   "source": [
    "# Single file\n",
    "griffin_lim_lb(mel_spec, stats_path, config, output_dir=tempfile.gettempdir(), wav_name=\"lb\")\n",
    "griffin_lim_tf.save_wav(inv_wav_tf, output_dir=tempfile.gettempdir(), wav_name=\"tf\")\n",
    "\n",
    "# Batch files\n",
    "griffin_lim_tf.save_wav(inv_wav_tf_batch, tempfile.gettempdir(), [x for x in range(10)])\n",
    "\n",
    "%ls {tempfile.gettempdir()} | grep '.wav'"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
